package pruebas.testArmas;

import static modelo.SetUps.ALCANCE_TORPEDO_SIMPLE;
import static modelo.SetUps.CARGA_TORPEDO_SIMPLE;
import static modelo.SetUps.DANIO_TORPEDO_SIMPLE;
import static org.junit.Assert.*;
import modelo.armas.Balas;
import modelo.armas.BandoEnemigo;
import modelo.armas.FaltaDeCargaException;
import modelo.armas.TorpedoSimple;
import modelo.util.Vector;

import org.junit.Before;
import org.junit.Test;

public class TestTorpedoSimple {

	private Vector p1 = new Vector (0,0);
	private Vector p2 = new Vector (1,0);
	private TorpedoSimple arma;
	
	@Before
	public void setUp() throws Exception {
		arma = new TorpedoSimple (new BandoEnemigo());//arma enemiga
	}

	@Test (expected = FaltaDeCargaException.class)
	public void testCarga (){
		//debe permitir disparar "carga veces"
		for (int i = 0; i < CARGA_TORPEDO_SIMPLE; i++){
			assertTrue ("deberia permitir seguir disparando",
					arma.puedeSeguirDisparando());
			arma.disparar(p1,p2);
			//CAMBIAR: falta agregar el contenedor 
		}
		//con la carga agotada levanta una excepcion
		arma.disparar(p1,p2);
	}
	
	@Test
	public void testAsignacionDePosicion(){
		Balas unaBala = arma.disparar(p1,p2);
		assertEquals("el arma no crea la bala en la posicion correcta",
				p1, unaBala.getPosicion());
	}
	
	@Test
	public void testValoresDeBala(){
		Balas unaBala = arma.disparar(p1,p2);
		assertEquals ("danio no se ha inicializado correctamente",
				DANIO_TORPEDO_SIMPLE, unaBala.getDanio());
		assertEquals ("alcance no se ha inicializado correctamente",
				ALCANCE_TORPEDO_SIMPLE, unaBala.getAlcance());
	}
}
